//package com.example.springbooteasycode.zjrc.project.statistics;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//
//import cn.com.eagle.kernel.net.Const;
//
//@Component
//public class NetHsmApiClient {
//	private static Logger logger = LoggerFactory.getLogger(NetHsmApiClient.class);
//    private int iLastErr;
//    // 构造函数：
//    public NetHsmApiClient() {
//    	iLastErr = 0;
//    }
//
//    public int GetLastError(){
//    	return iLastErr;
//    }
//
//    /**
//     * 常用函数：数据打印：HEX格式
//     *
//     * @param sInfo
//     * @param byteIn
//     * @param nDataLen
//     */
//    static public void OutputDataHex(String sInfo, byte[] byteIn, int nDataLen) {
//        int i, j, n, prev;
//
//        logger.info("[" + sInfo + "]" + "length" + "[" + nDataLen + "]");
//        prev = n = 0;
//        for (i = 0; i < nDataLen; i++) {
//            if (i == (prev + 16)) {
//            	logger.info("    ;");
//                for (j = prev; j < prev + 16; j++) {
//                    if (Character.isLetter((char) (byteIn[j] & 0xff)) == true) {
//                    	logger.info(String.valueOf((char) byteIn[j]));
//                    }
//                    else {
//                    	logger.info(" ");
//                    }
//                }
//                prev += 16;
//            }
//            if (Integer.toHexString(byteIn[i] & 0xff).length() == 1) {
//            	logger.info("0" + Integer.toHexString(byteIn[i] & 0xff) + " ");
//            }
//            else {
//            	logger.info(Integer.toHexString(byteIn[i] & 0xff) + " ");
//            }
//        }
//        if (i != prev) {
//            n = i;
//            for (; i < prev + 16; i++) {
//            	logger.info("   ");
//            }
//        }
//        logger.info("    ;");
//        for (i = prev; i < n; i++) {
//            if (Character.isLetter((char) byteIn[i]) == true) {
//            	logger.info(String.valueOf((char) byteIn[i]));
//            }
//            else {
//            	logger.info(" ");
//            }
//        }
//    }
//
//    public boolean Str2Hex(byte[] in, byte[] out, int len) {
//        byte[] asciiCode = { 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
//
//        if (len > in.length) {
//            return false;
//        }
//
//        if (len % 2 != 0) {
//            return false;
//        }
//
//        byte[] temp = new byte[len];
//
//        for (int i = 0; i < len; i++) {
//            if (in[i] >= 0x30 && in[i] <= 0x39) {
//                temp[i] = (byte) (in[i] - 0x30);
//            }
//            else if (in[i] >= 0x41 && in[i] <= 0x46) {
//                temp[i] = asciiCode[in[i] - 0x41];
//            }
//            else if (in[i] >= 0x61 && in[i] <= 0x66) {
//                temp[i] = asciiCode[in[i] - 0x61];
//            }
//            else {
//                return false;
//            }
//        }
//
//        for (int i = 0; i < len / 2; i++) {
//            out[i] = (byte) (temp[2 * i] * 16 + temp[2 * i + 1]);
//        }
//
//        return true;
//    }
//
//    static public boolean Hex2Str(byte[] in, byte[] out, int len) {
//        byte[] asciiCode = { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46 };
//
//        if (len > in.length) {
//            return false;
//        }
//
//        byte[] temp = new byte[2 * len];
//
//        for (int i = 0; i < len; i++) {
//            temp[2 * i] = (byte) ((in[i] & 0xf0) / 16);
//            temp[2 * i + 1] = (byte) (in[i] & 0x0f);
//        }
//
//        for (int i = 0; i < 2 * len; i++) {
//            if (temp[i] <= 9 && temp[i] >= 0) {
//                out[i] = (byte) (temp[i] + 0x30);
//            }
//            else {
//                out[i] = asciiCode[temp[i] - 0x0a];
//            }
//        }
//
//        return true;
//    }
//
//    /**
//     * 二行制转字符
//     *
//     * @param b
//     * @return
//     */
//    public String byte2hex(byte[] b) {
//        String hs = "";
//        String stmp = "";
//
//        for (int n = 0; n < b.length; n++) {
//            stmp = (Integer.toHexString(b[n] & 0XFF));
//            if (stmp.length() == 1) {
//                hs = hs + "0" + stmp;
//            }
//            else {
//                hs = hs + stmp;
//
//            }
////            if (n < b.length - 1) {
////                hs = hs + " ";
////            }
//        }
//
//        return hs.toUpperCase();
//    }
//
//
//	private int HSM_LINK(byte[] bSecBufferIn, int iSndLen, byte[] bSecBufferOut)
//	{
//		int nResult;
//
//		//初始化socket连接
//		ShareHandle tHandle = NetHsmSocketSession.initSocketSession();
//		if(null == tHandle) {
//			return Const.ERR_RECVFORM_HSM;
//		}
//
//		//发送数据
//		nResult = NetHsmSocketSession.sendData(tHandle,bSecBufferIn, iSndLen);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		//接收数据
//		nResult = NetHsmSocketSession.recvData(tHandle,bSecBufferOut);
//		if(nResult < 0) {
//			return Const.ERR_RECVFORM_HSM;
//		}
//
//		//释放连接
//		NetHsmSocketSession.releaseSession(tHandle);
//		if (bSecBufferOut[4] != 'A') {
//			return bSecBufferOut[5] << 8  + bSecBufferOut[6];
//		}
//		return Const.T_SUCCESS;
//	}
//
//	/**
//	 * 获取密码键盘工作密钥
//	 *
//	 * @param hSession
//	 * @param strTermID
//	 * @param wKeyLen
//	 * @param bKeyRet
//	 * @return
//	 */
//	public int GM_GetPadWorKey(String strTermID, int[] wKeyLen, byte[] bKeyRet)
//	{
//		byte[] bSecBufferIn  = new byte[16];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//		int nRet;
//
//		bSecBufferIn[3] = (byte)0x09;
//		bSecBufferIn[4] = (byte)0x01;
//		System.arraycopy(strTermID.getBytes(),0,bSecBufferIn,5,8);
//
//		nRet = HSM_LINK(bSecBufferIn,13,bSecBufferOut);
//		if(nRet != Const.T_SUCCESS)
//			return nRet;
//
//		wKeyLen[0] = bSecBufferOut[5];
//		System.arraycopy(bSecBufferOut, 6, bKeyRet, 0, 384);
//
//		return Const.T_SUCCESS;
//	}
//
//	/**
//	 * 转加密PIN
//	 *
//	 * @param hSession
//	 * @param strTermID
//	 * @param padPin
//	 * @param strAcco
//	 * @param pinOut
//	 * @return
//	 */
//	public int GM_ConvertPIN(String strTermID, byte[] padPin, String strAcco, byte[] pinOut)
//	{
//		byte[] bSecBufferIn  = new byte[64];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		int nResult, iSndLen;
//
//		bSecBufferIn[4] = (byte)0x03;
//		System.arraycopy(strTermID.getBytes(), 0, bSecBufferIn, 5, 8);
//		System.arraycopy(padPin, 0, bSecBufferIn, 13, 24);
//		System.arraycopy(strAcco.getBytes(), 0, bSecBufferIn, 37, strAcco.length());
//
//		iSndLen = 1 + 8 + 24 + strAcco.length();
//
//		bSecBufferIn[2] = (byte)((iSndLen >> 8) & 0xff);
//		bSecBufferIn[3] = (byte)(iSndLen &0xff);
//
//		nResult = HSM_LINK(bSecBufferIn,iSndLen + 4,bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		System.arraycopy(bSecBufferOut, 5, pinOut, 0, 24);
//
//		return Const.T_SUCCESS;
//	}
//
//	/**
//	 * 加密明文PIN
//	 *
//	 * @param hSession
//	 * @param strPlainPIN
//	 * @param strAcco
//	 * @param pinOut
//	 * @return
//	 */
//	public int GM_EncryptPIN(String strPlainPIN, String strAcco, byte[] pinOut)
//	{
//		byte[] bSecBufferIn  = new byte[64];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		int nResult, iSndLen;
//
//		bSecBufferIn[4] = (byte)0x04;
//		bSecBufferIn[5] = (byte)strPlainPIN.length();
//		System.arraycopy(strPlainPIN.getBytes(), 0, bSecBufferIn, 6, strPlainPIN.length());
//		System.arraycopy(strAcco.getBytes(), 0, bSecBufferIn, 6 + strPlainPIN.length(), strAcco.length());
//
//		iSndLen = 2 + strPlainPIN.length() + strAcco.length();
//
//		bSecBufferIn[2] = (byte)((iSndLen >> 8) & 0xff);
//		bSecBufferIn[3] = (byte)(iSndLen &0xff);
//
//		nResult = HSM_LINK(bSecBufferIn,iSndLen + 4, bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		System.arraycopy(bSecBufferOut, 5, pinOut, 0, 24);
//
//		return Const.T_SUCCESS;
//	}
//
//	//加密明文PIN
//		public int EncryptPIN(byte[] strPin, byte[] pinOut)
//		{
//			byte[] bSecBufferIn  = new byte[Const.SECBUF_MAX_SIZE];
//			byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//			int nResult, iSndLen;
//			int i, pinlen;
//
//			for(i = 0; i <= 12; i++)
//				if(strPin[i] < '0' || strPin[i] > '9')
//					break;
//			if(i < 4 || i == 12)
//				return Const.EPIN_LENGTH;
//			pinlen = i;
//
//			bSecBufferIn[0] = (byte)0x00;
//			bSecBufferIn[1] = (byte)(pinlen + 4);
//			bSecBufferIn[2] = (byte)'0';
//			bSecBufferIn[3] = (byte)'2';
//			bSecBufferIn[4] = (byte)0;
//			bSecBufferIn[5] = (byte)pinlen;
//
//			System.arraycopy(strPin, 0, bSecBufferIn, 6, pinlen);
//			iSndLen = 2 + 2 + 2 + pinlen;
//
//			nResult = HSM_LINK(bSecBufferIn,iSndLen,bSecBufferOut);
//			if (nResult != Const.T_SUCCESS) {
//				return nResult;
//			}
//
//			System.arraycopy(bSecBufferOut, 3, pinOut, 0, 24);
//
//			return Const.T_SUCCESS;
//		}
//
//	/**
//	 * 计算MAC
//	 *
//	 * @param hSession
//	 * @param dataLen
//	 * @param data
//	 * @param mac
//	 * @return
//	 */
//	public int GM_GenerateMAC(int dataLen, byte[] data, byte[] mac)
//	{
//		byte[] bSecBufferIn  = new byte[Const.SECBUF_MAX_SIZE];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		int nResult, iSndLen;
//
//		if(dataLen > Const.SECBUF_MAX_SIZE - 5)
//			return Const.EMES_TOO_LONG;
//
//		bSecBufferIn[4] = (byte)0x05;
//		bSecBufferIn[5] = (byte)(dataLen >> 8 & 0xFF);
//		bSecBufferIn[6] = (byte)(dataLen & 0xFF);
//		System.arraycopy(data, 0, bSecBufferIn, 7, dataLen);
//
//		iSndLen = 1 + 2 + dataLen;
//
//		bSecBufferIn[2] = (byte)(iSndLen >> 8 & 0xFF);
//		bSecBufferIn[3] = (byte)(iSndLen & 0xFF);
//
//		nResult = HSM_LINK(bSecBufferIn,iSndLen + 4,bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		System.arraycopy(bSecBufferOut, 5, mac, 0, 16);
//
//		return Const.T_SUCCESS;
//	}
//
//	public int GM_ConvertWYPIN(String strTermID, byte[] padPin, String strAcco, byte[] pinOut)
//	{
//		byte[] bSecBufferIn  = new byte[64];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		int nResult, iSndLen;
//
//		bSecBufferIn[4] = (byte)0x06;
//		System.arraycopy(strTermID.getBytes(), 0, bSecBufferIn, 5, 8);
//		System.arraycopy(padPin, 0, bSecBufferIn, 13, 24);
//		System.arraycopy(strAcco.getBytes(), 0, bSecBufferIn, 37, strAcco.length());
//
//		iSndLen = 1 + 8 + 24 + strAcco.length();
//
//		bSecBufferIn[2] = (byte)((iSndLen >> 8) & 0xff);
//		bSecBufferIn[3] = (byte)(iSndLen &0xff);
//
//		nResult = HSM_LINK(bSecBufferIn,iSndLen + 4,bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		byte[] tmpbuf = new byte[16];
//		System.arraycopy(bSecBufferOut, 5, tmpbuf, 0, bSecBufferOut[3] - 1);
//		Hex2Str(tmpbuf, pinOut, bSecBufferOut[3] - 1 );
//
//		return Const.T_SUCCESS;
//	}
//
//	public int GM_EncryptWYPIN(String strPwd, String strAcco, byte[] pinOut)
//	{
//		byte[] bSecBufferIn  = new byte[64];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		int nResult, iSndLen;
//
//		bSecBufferIn[4] = (byte)0x07;
//		bSecBufferIn[5] = (byte)strPwd.length();
//		System.arraycopy(strPwd.getBytes(), 0, bSecBufferIn, 6, strPwd.length());
//		iSndLen = 2 + strPwd.length();
//
//		bSecBufferIn[iSndLen + 4] = (byte)strAcco.length();
//		System.arraycopy(strAcco.getBytes(), 0, bSecBufferIn, iSndLen + 5, strAcco.length());
//
//		iSndLen += (1 + strAcco.length());
//
//		bSecBufferIn[2] = (byte)((iSndLen >> 8) & 0xff);
//		bSecBufferIn[3] = (byte)(iSndLen &0xff);
//
//		nResult = HSM_LINK(bSecBufferIn,iSndLen + 4,bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		byte[] tmpbuf = new byte[24];
//		System.arraycopy(bSecBufferOut, 5, tmpbuf, 0, bSecBufferOut[3] - 1);
//		Hex2Str(tmpbuf, pinOut, bSecBufferOut[3] - 1 );
//
//		return Const.T_SUCCESS;
//	}
//
//	public int GM_ConvertInetfPIN(String strTermID, byte[] padPin, String strAcco, byte[] pinOut)
//	{
//		byte[] bSecBufferIn  = new byte[64];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		int nResult, iSndLen;
//
//		bSecBufferIn[4] = (byte)0x08;
//		System.arraycopy(strTermID.getBytes(), 0, bSecBufferIn, 5, 8);
//		System.arraycopy(padPin, 0, bSecBufferIn, 13, 24);
//		System.arraycopy(strAcco.getBytes(), 0, bSecBufferIn, 37, strAcco.length());
//
//		iSndLen = 1 + 8 + 24 + strAcco.length();
//
//		bSecBufferIn[2] = (byte)((iSndLen >> 8) & 0xff);
//		bSecBufferIn[3] = (byte)(iSndLen &0xff);
//
//		nResult = HSM_LINK(bSecBufferIn,iSndLen + 4,bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		byte[] tmpbuf = new byte[16];
//		System.arraycopy(bSecBufferOut, 5, tmpbuf, 0, bSecBufferOut[3] - 1);
//		Hex2Str(tmpbuf, pinOut, bSecBufferOut[3] - 1 );
//
//		return Const.T_SUCCESS;
//	}
//
//	public int GM_EncryptInetfPIN(String strPwd, String strAcco, byte[] pinOut)
//	{
//		byte[] bSecBufferIn  = new byte[64];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		int nResult, iSndLen;
//
//		bSecBufferIn[4] = (byte)0x09;
//		bSecBufferIn[5] = (byte)strPwd.length();
//		System.arraycopy(strPwd.getBytes(), 0, bSecBufferIn, 6, strPwd.length());
//		iSndLen = 2 + strPwd.length();
//
//		bSecBufferIn[iSndLen + 4] = (byte)strAcco.length();
//		System.arraycopy(strAcco.getBytes(), 0, bSecBufferIn, iSndLen + 5, strAcco.length());
//
//		iSndLen += (1 + strAcco.length());
//
//		bSecBufferIn[2] = (byte)((iSndLen >> 8) & 0xff);
//		bSecBufferIn[3] = (byte)(iSndLen &0xff);
//
//		nResult = HSM_LINK(bSecBufferIn,iSndLen + 4,bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return nResult;
//		}
//
//		byte[] tmpbuf = new byte[24];
//		System.arraycopy(bSecBufferOut, 5, tmpbuf, 0, bSecBufferOut[3] - 1);
//		Hex2Str(tmpbuf, pinOut, bSecBufferOut[3] - 1 );
//
//		return Const.T_SUCCESS;
//	}
//
//	/**
//	 * 新增密码键盘
//	 *
//	 * @param hSession
//	 * @param strPadID
//	 * @return
//	 */
//	public int GM_RegistPad(String strPadID)
//	{
//		byte[] bSecBufferIn  = new byte[32];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		bSecBufferIn[3] = (byte)0x11;
//		bSecBufferIn[4] = (byte)0x10;
//		System.arraycopy(strPadID.getBytes(),0, bSecBufferIn, 5, strPadID.length());
//
//		return HSM_LINK(bSecBufferIn, 21, bSecBufferOut);
//	}
//
//	/**
//	 * 删除密码键盘
//	 *
//	 * @param hSession
//	 * @param strPadID
//	 * @return
//	 */
//	public int GM_DeletePad(String strPadID)
//	{
//		byte[] bSecBufferIn  = new byte[32];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//
//		bSecBufferIn[3] = (byte)0x11;
//		bSecBufferIn[4] = (byte)0x11;
//		System.arraycopy(strPadID.getBytes(),0, bSecBufferIn, 5, strPadID.length());
//
//		return HSM_LINK(bSecBufferIn, 21, bSecBufferOut);
//	}
//
//	/**
//	 * 获取密码TMK(SM4)
//	 *
//	 * @param hSession
//	 * @param strPadID
//	 * @return
//	 */
//	public byte[] GM_GetPadTMKey(String strPadID)
//	{
//		byte[] bSecBufferIn  = new byte[32];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//		byte[] bTmk;
//		int nRet, nLen;
//
//		bSecBufferIn[3] = (byte)0x11;
//		bSecBufferIn[4] = (byte)0x12;
//		System.arraycopy(strPadID.getBytes(), 0, bSecBufferIn, 5, strPadID.length());
//
//		nRet = HSM_LINK(bSecBufferIn, 21, bSecBufferOut);
//		if(nRet != Const.T_SUCCESS){
//			iLastErr = nRet;
//			return null;
//		}
//
//		nLen = (bSecBufferOut[2] & 0xff) << 8 | (bSecBufferOut[3] & 0xff) - 1;
//		bTmk = new byte[nLen];
//		System.arraycopy(bSecBufferOut, 5, bTmk, 0, nLen);
//
//		return bTmk;
//	}
//
//	/**
//	 * 获取密码工作密钥(SM4)
//	 *
//	 * @param hSession
//	 * @param strPadID
//	 * @return
//	 */
//	public byte[] GM_GetPadWKeySM4(String strPadID)
//	{
//		byte[] bSecBufferIn  = new byte[32];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//		byte[] bWKey;
//		int nRet, nLen;
//
//		bSecBufferIn[3] = (byte)0x11;
//		bSecBufferIn[4] = (byte)0x13;
//		System.arraycopy(strPadID.getBytes(), 0, bSecBufferIn, 5, strPadID.length());
//
//		nRet = HSM_LINK(bSecBufferIn, 21, bSecBufferOut);
//		if(nRet != Const.T_SUCCESS){
//			iLastErr = nRet;
//			return null;
//		}
//
//		nLen = (bSecBufferOut[2] & 0xff) << 8 | (bSecBufferOut[3] & 0xff) - 1;
//		bWKey = new byte[nLen];
//		System.arraycopy(bSecBufferOut, 5, bWKey, 0, nLen);
//
//		return bWKey;
//	}
//
//	/**
//	 * 转换PIN(SM4->Core)
//	 *
//	 * @param hSession
//	 * @param strPadID
//	 * @param bPadPIN
//	 * @param strAccount
//	 * @return
//	 */
//	public byte[] GM_TransPINSM4toCore(String strPadID, byte[] bPadPIN, String strAccount)
//	{
//		byte[] bSecBufferIn  = new byte[96];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//		byte[] bRet;
//		int nRet, nLen;
//
//		bSecBufferIn[4] = (byte)0x14;
//		System.arraycopy(strPadID.getBytes(), 0, bSecBufferIn, 5, strPadID.length());
//		nLen = 1 + 16;
//
//		System.arraycopy(bPadPIN, 0, bSecBufferIn, nLen + 4, 32);
//		nLen += 32;
//		System.arraycopy(strAccount.getBytes(), 0, bSecBufferIn, nLen + 4, strAccount.length());
//		nLen += strAccount.length();
//
//		bSecBufferIn[3] = (byte)(nLen & 0xff);
//		nRet = HSM_LINK(bSecBufferIn, nLen + 4, bSecBufferOut);
//		if(nRet != Const.T_SUCCESS){
//			iLastErr = nRet;
//			return null;
//		}
//
//		nLen = (bSecBufferOut[2] & 0xff) << 8 | (bSecBufferOut[3] & 0xff) - 1;
//		bRet = new byte[nLen];
//		System.arraycopy(bSecBufferOut, 5, bRet, 0, nLen);
//
//		return bRet;
//	}
//
//	/**
//	 * 加密明文PIN(核心格式，核心未完成国密改造前，功能同GM_EncryptPIN, 国密改造后，返回国密密文)
//	 *
//	 * @param hSession
//	 * @param strClearPIN
//	 * @param strAccount
//	 * @return
//	 */
//	public byte[] GM_EncryptPINCore(String strClearPIN, String strAccount)
//	{
//		byte[] bSecBufferIn  = new byte[64];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//		byte[] bRet;
//		int nRet, nLen;
//
//		bSecBufferIn[4] = (byte)0x15;
//		bSecBufferIn[5] = (byte)(strClearPIN.length() & 0xff);
//		System.arraycopy(strClearPIN.getBytes(), 0, bSecBufferIn, 6, strClearPIN.length());
//		nLen = 2 + strClearPIN.length();
//
//		System.arraycopy(strAccount.getBytes(), 0, bSecBufferIn, nLen + 4, strAccount.length());
//		nLen += strAccount.length();
//
//		bSecBufferIn[3] = (byte)(nLen & 0xff);
//		nRet = HSM_LINK(bSecBufferIn, nLen + 4, bSecBufferOut);
//		if(nRet != Const.T_SUCCESS){
//			iLastErr = nRet;
//			return null;
//		}
//
//		nLen = (bSecBufferOut[2] & 0xff) << 8 | (bSecBufferOut[3] & 0xff) - 1;
//		bRet = new byte[nLen];
//		System.arraycopy(bSecBufferOut, 5, bRet, 0, nLen);
//
//		return bRet;
//	}
//
//	/**
//	 * 计算MAC(核心格式，核心未完成国密改造前，功能同GM_GenerateMAC, 国密改造后，返回国密MAC)
//	 *
//	 * @param hSession
//	 * @param dataLen
//	 * @param bData
//	 * @return
//	 */
//	public byte[] GM_GenerateMACCore(int dataLen, byte[] bData)
//	{
//		byte[] bSecBufferIn  = new byte[Const.SECBUF_MAX_SIZE];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//		byte[] bRet;
//		int nRet, nLen;
//
//		bSecBufferIn[4] = (byte)0x16;
//		bSecBufferIn[5] = (byte)(dataLen >> 8 & 0xff);
//		bSecBufferIn[6] = (byte)(dataLen & 0xff);
//		System.arraycopy(bData, 0, bSecBufferIn, 7, dataLen);
//		nLen = 3 + dataLen;
//
//		bSecBufferIn[2] = (byte)(nLen >> 8 & 0xff);
//		bSecBufferIn[3] = (byte)(nLen & 0xff);
//
//		nRet = HSM_LINK(bSecBufferIn, nLen + 4, bSecBufferOut);
//		if(nRet != Const.T_SUCCESS){
//			iLastErr = nRet;
//			return null;
//		}
//
//		nLen = (bSecBufferOut[2] & 0xff) << 8 | (bSecBufferOut[3] & 0xff) - 1;
//		bRet = new byte[nLen];
//		System.arraycopy(bSecBufferOut, 5, bRet, 0, nLen);
//
//		return bRet;
//	}
//
//	public byte[] GM_TRANS_PIN(String padid, int inflag, int inpwdlen, byte[] inpwd, String acct, int outflag, int outchn)
//	{
//		byte[] pinOut;
//		byte[] bSecBufferIn  = new byte[128];
//		byte[] bSecBufferOut = new byte[Const.SECBUF_MAX_SIZE];
//		int nRet, nLen;
//
//		int nResult, iSndLen;
//
//		int idx=4;
//		bSecBufferIn[idx] = (byte)0x17;
//		idx+=1;
//
//		System.arraycopy(padid.getBytes(), 0, bSecBufferIn, idx, padid.length());
//		idx+=16;
//
//		bSecBufferIn[idx] =  (byte)(inflag & 0xff);
//		idx+=1;
//
//		bSecBufferIn[idx] = (byte)(inpwdlen & 0xff);
//		idx+=1;
//
//		System.arraycopy(inpwd, 0, bSecBufferIn, idx, inpwdlen);
//		idx+=inpwdlen;
//
//		bSecBufferIn[idx] = (byte)(acct.length() & 0xff);
////		bSecBufferIn[idx] = (byte)0x13;
//		idx+=1;
//
//		System.arraycopy(acct.getBytes(), 0, bSecBufferIn, idx, 19);
//		idx+=19;
//
//		bSecBufferIn[idx] = (byte)(outflag & 0xff);
//		idx+=1;
//
//		bSecBufferIn[idx] = (byte)(outchn & 0xff);
//		idx+=1;
//
//		iSndLen = idx-4;
//
//		bSecBufferIn[2] = (byte)((iSndLen >> 8) & 0xff);
//		bSecBufferIn[3] = (byte)(iSndLen &0xff);
//		nResult = HSM_LINK(bSecBufferIn,iSndLen+4,bSecBufferOut);
//		if (nResult != Const.T_SUCCESS) {
//			return null;
//		}
//		logger.info("安全平台返回原始数据：------------>>>"+byte2hex(bSecBufferOut));
//		int idn = 5;
//		int len  = (bSecBufferOut[5] & 0xff);
//		logger.info("bSecBufferOut[5]:"+bSecBufferOut[5]);
//		logger.info("len:"+len);
//		idn += 1;
//		nLen = (bSecBufferOut[2] & 0xff) << 8 | (bSecBufferOut[3] & 0xff) - 1;
//		pinOut = new byte[len];
//		System.arraycopy(bSecBufferOut, idn, pinOut, 0, len);
//
//		return pinOut;
//	}
//
//}
